#include <string>
#include <vector>
using namespace std;

/*
3
命令：3 1 2
最终的队列：Foo Boo Moo

经过了命令 2 3 1 之后，队列变成了 Foo Boo Moo
[""  ""  ""]
[Boo Moo Foo]  result
[Foo Boo Moo]

还原的方法
1.找到队列中的当前牛
2.在命令数组中，找到与当前位置匹配的命令的位置 j
3.result[j - 1] = 当前牛
*/
// 在 commands 里，找到 target 的位置
int find(vector<int> commands, int target) {
  int result;
  for (int i = 0; i < commands.size(); ++i) {
    if (commands[i] == target) {
      result = i;
      break;
    }
  }

  return result;
}

vector<string> bsd(vector<string> cows, vector<int> commands, int n) {
  // 还原 3 轮舞蹈
  for (int i = 0; i < 3; ++i) {
    vector<string> tmp(n, ""); // 还原一轮之后，每一头牛的位置

    for (int j = 0; j < cows.size(); ++j) {
      // 遍历 cows 中的每一头牛，找到它们的位置
      // j = 0, 表示的是命令中的 1
      int pos = find(commands, j + 1); // 找到和牛的位置对应的命令的位置
      tmp[pos] = cows[j];
    }
    // tmp 就是还原了一轮之后的牛
    cows = tmp; // 每一次还原都要基于上一轮还原的结果
  }

  return cows;
}

/*
cows: [Foo Boo Moo] 初始的队列
[Boo Foo Moo]
[Foo Boo Moo]
[Boo Foo Moo]
[]
commands: 2 1 3
3 轮之后的样子
*/
vector<string> dance(vector<string> cows, vector<int> commands, int n) {

}

int main(int argc, char const *argv[])
{
  /* code */
  return 0;
}
